import pygame
from pygame.sprite import Sprite

class Alien(Sprite):
    """表示单个外星人的类"""
    def __init__(self, ai_game):
        # 初始化外星人并设置其位置
        super().__init__()
        self.screen = ai_game.screen
        self.settings = ai_game.settings

        # 加载外星人图像并设置其rect属性
        self.image = pygame.image.load('images/alien.bmp')
        self.rect = self.image.get_rect()

        # 每个外星人初始位置都在屏幕的左上角附近
        self.rect.x = self.rect.width
        self.rect.y = self.rect.height

        # 存储外星人的精确的水平位置
        self.x = float(self.rect.x)

        # Alien类不需要一个在屏幕上绘制外星人的方法，
        # 因为我们将使用一个Pygame编组方法，自动在屏幕上绘制编组中的所有元素。

    """
        判断是否位于屏幕左边缘或右边缘
        如果外星人的rect的属性right大于或等于屏幕的rect的right属性，就说明外星人位于屏幕右边缘；
        如果外星人的rect的left属性小于或等于0，就说明外星人位于屏幕左边缘
        """

    def check_edges(self):
        # 如果外星人处于屏幕边缘就返回True
        screen_rect = self.screen.get_rect()
        if self.rect.right >= screen_rect.right or self.rect.left <= 0:
            return True

    def update(self):
        # 将移动量设置为外星人速度和fleet_direction的乘积，让外星人向左或向右移动
        # 如果fleet_direction为1，就将外星人的当前x坐标增大alien_speed，从而将外星人向右移；
        # 如果fleet_direction为-1，就将外星人的当前x坐标减去alien_speed，从而将外星人向左移。
        self.x += (self.settings.alien_speed * self.settings.fleet_direction)
        # 使用self.x的值来更新外星人的rect的位置
        self.rect.x = self.x

